package com.sff.easyexcel.test.demo.util;

import org.springframework.cglib.beans.BeanCopier;

import java.util.HashMap;
import java.util.Map;

public class BeanUtils {

    private static Map<String, BeanCopier> beanCopierMap = new HashMap<>();

    /**
     * 1.要求字段的名称和类型一致，int 和 Integer 不能相互复制
     * 2.BeanCopier 性能近乎getter/setter ; 但是 BeanCopier 的创建时消耗较大,所以不要频繁创建该实体，最好的处理方式是静态化或者缓存起来
     */
    public static void copyProperties(Object source, Object target) {

        BeanCopier copier = null;
        String beanKey = generateKey(source.getClass(), target.getClass());

        if (!beanCopierMap.containsKey(beanKey)) {

            copier = BeanCopier.create(source.getClass(), target.getClass(), false);
            beanCopierMap.put(beanKey, copier);

        } else {

            copier = beanCopierMap.get(beanKey);
        }
        copier.copy(source, target, null);
    }

    private static String generateKey(Class<?> source, Class<?> target) {
        return source.toString() + target.toString();
    }

}
